/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import controlador.DBManager;
import hibernatecontrolador.ContactoJpaController;
import hibernatecontrolador.EventoJpaController;
import hibernatecontrolador.InvitarJpaController;
import hibernatecontrolador.LugarJpaController;
import hibernatecontrolador.NotaJpaController;
import hibernatecontrolador.SeramigoJpaController;
import hibernatemodelo.Contacto;
import hibernatemodelo.Evento;
import hibernatemodelo.Invitar;
import hibernatemodelo.Lugar;
import hibernatemodelo.Nota;
import hibernatemodelo.Seramigo;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * Clase principal y contenedora de todo el proyecto
 *
 * @author Mª Luz García Rodríguez
 * @author Luis Massó Saiz
 */
public class MdiPrueba extends javax.swing.JFrame
{

    JIntFicheros ficheros;
    JIntTablasBd tablas;
    JIntConectado conectado;
    JIntEventos eventosPanel;
    JIntPanelUsuario panelusuario;
    JIntNotas panelNotas;

    //JFrameTablasBD tablas;
    //JFrameFicheros jfFich;
    JFrameCrearBd jfCrearBd;
    JFileChooser jfileChooser;

    //Entity Manager
    public static EntityManagerFactory emf;
    public static EntityManager em;
    public static ContactoJpaController contactoControlador;
    public static EventoJpaController eventoControlador;
    public static LugarJpaController lugarControlador;
    public static NotaJpaController notaControlador;
    public static SeramigoJpaController serAmigoControlador;
    public static InvitarJpaController invitarControlador;

    public static List<Contacto> listaContactos;
    public static List<Evento> listaEventos;
    public static List<Lugar> listaLugares;
    public static List<Nota> listaNotas;
    public static List<Seramigo> listaAmigos;
    public static List<Invitar> listaInvitar;
    public static Contacto miContacto;

    public JIntTablasBd getTablas()
    {
        return tablas;
    }

    public void setTablas(JIntTablasBd tablas)
    {
        this.tablas = tablas;
        desktopPane.add(tablas);
        tablas.show();
    }

    public void setTablas(JIntTablasBd tablas, String dialogo)
    {
        this.tablas = tablas;
        tablas.setPadre(this);

        desktopPane.add(tablas);
        tablas.show();
        conectado.hide();
        tablas.setControl(1);
    }

    /**
     * Constructor MdiPrueba
     */
    public MdiPrueba()
    {
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        initComponents();

        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();

        jLabel2.setSize(pantalla);
        this.setMinimumSize(pantalla);

        String workingdir = System.getProperty("user.dir");
        jfileChooser = new JFileChooser(new File(workingdir));
        jfileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        jfileChooser.setFileFilter(new FileNameExtensionFilter("Archivos SQLite", "sqlite"));

        MenuDesconectarBD.setEnabled(false);
        MenuEjecutarComandoBD.setEnabled(false);
        MenuRenombrarBD.setEnabled(false);
        MenuPropiedadesBD.setEnabled(false);

        ficheros = new JIntFicheros();

        tablas = new JIntTablasBd();
        tablas.setPadre(this);

        conectado = new JIntConectado();
        conectado.setPadre(this);

        desktopPane.add(conectado);

        jfCrearBd = new JFrameCrearBd();
        jfCrearBd.setMymdi(this);

        MenuDesconectarMySQL.setEnabled(false);
        MenuCrearEvento.setEnabled(false);
        MenuCrearNota.setEnabled(false);
        MenuAgregarAmigo.setEnabled(false);

        emf = Persistence.createEntityManagerFactory("MLuzLuisPU");

        em = emf.createEntityManager();

        contactoControlador = new ContactoJpaController(emf);
        eventoControlador = new EventoJpaController(emf);
        lugarControlador = new LugarJpaController(emf);
        notaControlador = new NotaJpaController(emf);
        serAmigoControlador = new SeramigoJpaController(emf);
        invitarControlador = new InvitarJpaController(emf);

        listaContactos = contactoControlador.findContactoEntities();
        listaEventos = eventoControlador.findEventoEntities();
        listaLugares = lugarControlador.findLugarEntities();
        listaNotas = notaControlador.findNotaEntities();
        listaAmigos = serAmigoControlador.findSeramigoEntities();
        listaInvitar = invitarControlador.findInvitarEntities();

        panelusuario = new JIntPanelUsuario();
        panelusuario.setPadre(this);
        desktopPane.add(panelusuario);

        eventosPanel = new JIntEventos();
        eventosPanel.setPadre(this);
        desktopPane.add(eventosPanel);

        panelNotas = new JIntNotas();
        panelNotas.setPadre(this);
        desktopPane.add(panelNotas);

        this.setLocationRelativeTo(null);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents()
    {

        jDesktopPane1 = new javax.swing.JDesktopPane();
        desktopPane = new javax.swing.JDesktopPane();
        jLabel2 = new javax.swing.JLabel();
        menuBar = new javax.swing.JMenuBar();
        fileMenu = new javax.swing.JMenu();
        MenuAbrirDom = new javax.swing.JMenuItem();
        MenuAbrirSax = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        MenuAbrirTexto = new javax.swing.JMenuItem();
        MenuAbrirBinario = new javax.swing.JMenuItem();
        editMenu = new javax.swing.JMenu();
        MenuCrearBD = new javax.swing.JMenuItem();
        jSeparator2 = new javax.swing.JPopupMenu.Separator();
        MenuConectarBD = new javax.swing.JMenuItem();
        MenuDesconectarBD = new javax.swing.JMenuItem();
        jSeparator3 = new javax.swing.JPopupMenu.Separator();
        MenuEjecutarComandoBD = new javax.swing.JMenuItem();
        MenuRenombrarBD = new javax.swing.JMenuItem();
        MenuPropiedadesBD = new javax.swing.JMenuItem();
        jMenu1 = new javax.swing.JMenu();
        MenuConectarMySQL = new javax.swing.JMenuItem();
        MenuDesconectarMySQL = new javax.swing.JMenuItem();
        jSeparator4 = new javax.swing.JPopupMenu.Separator();
        MenuAgregarAmigo = new javax.swing.JMenuItem();
        MenuCrearEvento = new javax.swing.JMenuItem();
        MenuCrearNota = new javax.swing.JMenuItem();
        helpMenu = new javax.swing.JMenu();
        MenuSalirSalir = new javax.swing.JMenuItem();
        aboutMenuItem = new javax.swing.JMenuItem();

        javax.swing.GroupLayout jDesktopPane1Layout = new javax.swing.GroupLayout(jDesktopPane1);
        jDesktopPane1.setLayout(jDesktopPane1Layout);
        jDesktopPane1Layout.setHorizontalGroup(
            jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jDesktopPane1Layout.setVerticalGroup(
            jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 48)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("BASE DE DATOS DE MOTOS");
        jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jLabel2.setMaximumSize(new java.awt.Dimension(1500, 1500));
        desktopPane.add(jLabel2);
        jLabel2.setBounds(0, 0, 730, 160);

        fileMenu.setMnemonic('f');
        fileMenu.setText("Ficheros");

        MenuAbrirDom.setMnemonic('o');
        MenuAbrirDom.setText("Abrir XML-DOM");
        MenuAbrirDom.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuAbrirDomActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirDom);

        MenuAbrirSax.setMnemonic('s');
        MenuAbrirSax.setText("Abrir XML-SAX");
        MenuAbrirSax.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuAbrirSaxActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirSax);
        fileMenu.add(jSeparator1);

        MenuAbrirTexto.setMnemonic('a');
        MenuAbrirTexto.setText("Abrir fichero de texto");
        MenuAbrirTexto.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuAbrirTextoActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirTexto);

        MenuAbrirBinario.setMnemonic('x');
        MenuAbrirBinario.setText("Abrir fichero binario");
        MenuAbrirBinario.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuAbrirBinarioActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirBinario);

        menuBar.add(fileMenu);

        editMenu.setMnemonic('e');
        editMenu.setText("BDR");

        MenuCrearBD.setMnemonic('t');
        MenuCrearBD.setText("Crear");
        MenuCrearBD.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuCrearBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuCrearBD);
        editMenu.add(jSeparator2);

        MenuConectarBD.setMnemonic('y');
        MenuConectarBD.setText("Conectar....");
        MenuConectarBD.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuConectarBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuConectarBD);

        MenuDesconectarBD.setMnemonic('p');
        MenuDesconectarBD.setText("Desconectar");
        MenuDesconectarBD.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuDesconectarBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuDesconectarBD);
        editMenu.add(jSeparator3);

        MenuEjecutarComandoBD.setMnemonic('d');
        MenuEjecutarComandoBD.setText("Ejecutar comando");
        MenuEjecutarComandoBD.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuEjecutarComandoBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuEjecutarComandoBD);

        MenuRenombrarBD.setMnemonic('d');
        MenuRenombrarBD.setText("Renombrar");
        MenuRenombrarBD.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuRenombrarBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuRenombrarBD);

        MenuPropiedadesBD.setMnemonic('d');
        MenuPropiedadesBD.setText("Propiedades");
        MenuPropiedadesBD.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuPropiedadesBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuPropiedadesBD);

        menuBar.add(editMenu);

        jMenu1.setText("Agenda de Eventos");

        MenuConectarMySQL.setText("Conectar");
        MenuConectarMySQL.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuConectarMySQLActionPerformed(evt);
            }
        });
        jMenu1.add(MenuConectarMySQL);

        MenuDesconectarMySQL.setText("Desconectar");
        MenuDesconectarMySQL.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuDesconectarMySQLActionPerformed(evt);
            }
        });
        jMenu1.add(MenuDesconectarMySQL);
        jMenu1.add(jSeparator4);

        MenuAgregarAmigo.setText("Panel del usuario");
        MenuAgregarAmigo.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuAgregarAmigoActionPerformed(evt);
            }
        });
        jMenu1.add(MenuAgregarAmigo);

        MenuCrearEvento.setText("Crear evento");
        MenuCrearEvento.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuCrearEventoActionPerformed(evt);
            }
        });
        jMenu1.add(MenuCrearEvento);

        MenuCrearNota.setText("Notas");
        MenuCrearNota.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuCrearNotaActionPerformed(evt);
            }
        });
        jMenu1.add(MenuCrearNota);

        menuBar.add(jMenu1);

        helpMenu.setMnemonic('h');
        helpMenu.setText("Salir");

        MenuSalirSalir.setMnemonic('c');
        MenuSalirSalir.setText("Salir");
        MenuSalirSalir.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                MenuSalirSalirActionPerformed(evt);
            }
        });
        helpMenu.add(MenuSalirSalir);

        aboutMenuItem.setMnemonic('a');
        aboutMenuItem.setText("About");
        helpMenu.add(aboutMenuItem);

        menuBar.add(helpMenu);

        setJMenuBar(menuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1241, Short.MAX_VALUE)
                .addGap(0, 0, 0))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 609, Short.MAX_VALUE)
                .addGap(0, 0, 0))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Código que se ejecuta al darle al menú abrir binario
     *
     * @param evt
     */
    private void MenuAbrirBinarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirBinarioActionPerformed

        if (!ficheros.isVisible())
        {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirBinario();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirBinarioActionPerformed

    /**
     * Método que se ejecuta al darle al menú abrir con DOM
     *
     * @param evt
     */
    private void MenuAbrirDomActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirDomActionPerformed
        if (!ficheros.isVisible())
        {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirDom();
//        jfFich.setMenuAbrirDom();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirDomActionPerformed

    /**
     * Método que se ejecuta al darle al menú abrir con SAX
     *
     * @param evt
     */
    private void MenuAbrirSaxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirSaxActionPerformed
        if (!ficheros.isVisible())
        {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirSax();

//        jfFich.setMenuAbrirSax();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirSaxActionPerformed

    /**
     * Método que se ejecuta al darle al menú abrir fichero de texto
     *
     * @param evt
     */
    private void MenuAbrirTextoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirTextoActionPerformed
        if (!ficheros.isVisible())
        {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirTexto();
//        jfFich.setMenuAbrirTexto();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirTextoActionPerformed

    /**
     * Método que se ejecuta al darle al menú BDR > crear
     *
     * @param evt
     */
    private void MenuCrearBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuCrearBDActionPerformed
        jfCrearBd.setVisible(true);
//        jfCrearBd.setMymdi(this);
    }//GEN-LAST:event_MenuCrearBDActionPerformed

    /**
     * Método que se ejecuta al darle al menú BDR > Conectar
     *
     * @param evt
     */
    private void MenuConectarBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuConectarBDActionPerformed
        int opcion = jfileChooser.showOpenDialog(null);
        if (opcion == JFileChooser.APPROVE_OPTION)
        {
            File ficheroSeleccionado = jfileChooser.getSelectedFile();
            try
            {
                this.conectarBd(new DBManager(ficheroSeleccionado.getAbsolutePath()));
            } catch (Exception ex)
            {
                JOptionPane.showMessageDialog(null, "Se ha producido un error abriendo la base de datos " + ficheroSeleccionado.getName()
                        + "\nInténtelo de nuevo más tarde", "Conectando BD", JOptionPane.ERROR_MESSAGE);
                this.MenuDesconectarBDActionPerformed(evt);
            }
        }

    }//GEN-LAST:event_MenuConectarBDActionPerformed

    /**
     * Método que se ejecuta al darle al menú BDR > Desconectar
     *
     * @param evt
     */
    private void MenuDesconectarBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuDesconectarBDActionPerformed

        try
        {
            conectado.cerrar();
            MenuConectarBD.setEnabled(true);
            MenuCrearBD.setEnabled(true);
            MenuDesconectarBD.setEnabled(false);
            MenuEjecutarComandoBD.setEnabled(false);
            MenuPropiedadesBD.setEnabled(false);
            MenuRenombrarBD.setEnabled(false);
        } catch (SQLException ex)
        {
            JOptionPane.showMessageDialog(null, "No se ha podido cerrar la conexión con la Base de Datos\nReinicie el programa o inténtelo de nuevo", "Cerrando BD", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_MenuDesconectarBDActionPerformed

    /**
     * Método que se ejecuta al darle al menú BDR > Ejecutar Comando
     *
     * @param evt
     */
    private void MenuEjecutarComandoBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuEjecutarComandoBDActionPerformed
        String comando = JOptionPane.showInputDialog(null, "Escriba el comando a ejecutar", "Comando", JOptionPane.PLAIN_MESSAGE);

        if (!comando.equals(""))
        {
            conectado.ejecutarComando(comando);
        }
    }//GEN-LAST:event_MenuEjecutarComandoBDActionPerformed

    /**
     * Método que se ejecuta al darle al menú BDR > Renombrar
     *
     * @param evt
     */
    private void MenuRenombrarBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuRenombrarBDActionPerformed
        String nombreViejo = conectado.getMydb().getArchivoBD();
        try
        {
            //conectarBd(new DBManager(nombreViejo));
        } catch (Exception ex)
        {
            Logger.getLogger(MdiPrueba.class.getName()).log(Level.SEVERE, null, ex);
        }
        String nuevoNombre = JOptionPane.showInputDialog(null, "Escriba el nuevo nombre de archivo", "Renombrar", JOptionPane.PLAIN_MESSAGE);

        if (nuevoNombre != null && !nuevoNombre.isEmpty())
        {

            MenuDesconectarBDActionPerformed(null);

            if (!nuevoNombre.contains(".sqlite"))
            {
                nuevoNombre += ".sqlite";
            }

            nuevoNombre.replaceAll(" ", "_");

            if (nombreViejo.contains("\\"))
            {
                nuevoNombre = nombreViejo.substring(0, nombreViejo.lastIndexOf("\\")) + "\\" + nuevoNombre;
            }
            File f1 = new File(nombreViejo);
            File f2 = new File(nuevoNombre);

            boolean renombrado = f1.renameTo(f2);
            if (renombrado)
            {
                JOptionPane.showMessageDialog(null, "Fichero renombrado correctamente.", "Renombrar", JOptionPane.PLAIN_MESSAGE);
                try
                {
                    conectarBd(new DBManager(nuevoNombre));
                } catch (Exception ex)
                {
                    JOptionPane.showMessageDialog(null, "Error al abrir el fichero", "Renombrar", JOptionPane.ERROR_MESSAGE);
                }
            } else
            {
                JOptionPane.showMessageDialog(null, "Error al renombrar el fichero.\n"
                        + "Para poder renombrarlo, no debe haber mostrado los campos\n"
                        + "Inténtelo de nuevo ahora", "Renombrar", JOptionPane.ERROR_MESSAGE);
                try
                {
                    conectarBd(new DBManager(nombreViejo));
                } catch (Exception ex)
                {
                    JOptionPane.showMessageDialog(null, "Error al abrir el fichero", "Renombrar", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    }//GEN-LAST:event_MenuRenombrarBDActionPerformed

    /**
     * Método que se ejecuta al darle al menú BDR > Propiedades
     *
     * @param evt
     */
    private void MenuPropiedadesBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuPropiedadesBDActionPerformed
        conectado.refrescar();
        conectado.show();
    }//GEN-LAST:event_MenuPropiedadesBDActionPerformed

    /**
     * Método que se ejecuta al darle al menú Salir > Salir
     *
     * @param evt
     */
    private void MenuSalirSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuSalirSalirActionPerformed
        int dialogResult = JOptionPane.showConfirmDialog(null, "¿Estás seguro de que quieres salir?", "Warning", JOptionPane.YES_NO_OPTION);

        if (dialogResult == JOptionPane.YES_OPTION)
        {
            em.close();
            emf.close();
            System.exit(0);
        }
    }//GEN-LAST:event_MenuSalirSalirActionPerformed

    /**
     * Método que se ejecuta al darle al menú Agenda de eventos > Conectar
     *
     * @param evt
     */
    private void MenuConectarMySQLActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuConectarMySQLActionPerformed
        JFrameLogin ventanaLogin = new JFrameLogin();
        ventanaLogin.setPadre(this);
        ventanaLogin.setLocationRelativeTo(null);

        ventanaLogin.setVisible(true);
    }//GEN-LAST:event_MenuConectarMySQLActionPerformed

    /**
     * Método que se ejecuta al darle al menú Agenda de eventos > Desconectar
     *
     * @param evt
     */
    private void MenuDesconectarMySQLActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuDesconectarMySQLActionPerformed
        MenuDesconectarMySQL.setEnabled(false);
        MenuCrearEvento.setEnabled(false);
        MenuCrearNota.setEnabled(false);
        MenuAgregarAmigo.setEnabled(false);
        MenuConectarMySQL.setEnabled(true);
        panelusuario.desconectar();
        miContacto = null;

        if (panelusuario.isVisible())
        {
            panelusuario.desconectar();
            panelusuario.hide();
            eventosPanel.limpiarCampos();
            eventosPanel.hide();
        }
        
        if (panelNotas.isVisible()){
            panelNotas.hide();            
        }
    }//GEN-LAST:event_MenuDesconectarMySQLActionPerformed

    /**
     * Método que se ejecuta al darle al menú Agenda de eventos > Panel del
     * usuario
     *
     * @param evt
     */
    private void MenuAgregarAmigoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAgregarAmigoActionPerformed
        if (!panelusuario.isVisible())
        {
            panelusuario.setVisible(true);
        }
    }//GEN-LAST:event_MenuAgregarAmigoActionPerformed

    /**
     * Método que se ejecuta al dar al botón Crear evento
     * @param evt 
     */
    private void MenuCrearEventoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuCrearEventoActionPerformed
        eventosPanel.setIdActual(-1);
        eventosPanel.show();
    }//GEN-LAST:event_MenuCrearEventoActionPerformed

    /**
     * Llama al método para mostrar el formulario de notas
     * @param evt 
     */
    private void MenuCrearNotaActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_MenuCrearNotaActionPerformed
    {//GEN-HEADEREND:event_MenuCrearNotaActionPerformed
        mostrarNotas();
    }//GEN-LAST:event_MenuCrearNotaActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[])
    {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try
        {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
            {
                if ("Nimbus".equals(info.getName()))
                {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex)
        {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex)
        {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex)
        {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex)
        {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new MdiPrueba().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem MenuAbrirBinario;
    private javax.swing.JMenuItem MenuAbrirDom;
    private javax.swing.JMenuItem MenuAbrirSax;
    private javax.swing.JMenuItem MenuAbrirTexto;
    private javax.swing.JMenuItem MenuAgregarAmigo;
    private javax.swing.JMenuItem MenuConectarBD;
    private javax.swing.JMenuItem MenuConectarMySQL;
    private javax.swing.JMenuItem MenuCrearBD;
    private javax.swing.JMenuItem MenuCrearEvento;
    private javax.swing.JMenuItem MenuCrearNota;
    private javax.swing.JMenuItem MenuDesconectarBD;
    private javax.swing.JMenuItem MenuDesconectarMySQL;
    private javax.swing.JMenuItem MenuEjecutarComandoBD;
    private javax.swing.JMenuItem MenuPropiedadesBD;
    private javax.swing.JMenuItem MenuRenombrarBD;
    private javax.swing.JMenuItem MenuSalirSalir;
    private javax.swing.JMenuItem aboutMenuItem;
    private javax.swing.JDesktopPane desktopPane;
    private javax.swing.JMenu editMenu;
    private javax.swing.JMenu fileMenu;
    private javax.swing.JMenu helpMenu;
    private javax.swing.JDesktopPane jDesktopPane1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JPopupMenu.Separator jSeparator2;
    private javax.swing.JPopupMenu.Separator jSeparator3;
    private javax.swing.JPopupMenu.Separator jSeparator4;
    private javax.swing.JMenuBar menuBar;
    // End of variables declaration//GEN-END:variables

    /**
     * Método que se conecta con la BD especificada (archivo)
     *
     * @param archivo (DBManager)
     */
    public void conectarBd(DBManager archivo)
    {
        if (conectado.abrir(archivo))
        {
            //conectado.setMydb(new DBManager(ficheroSeleccionado.getAbsolutePath()));
            conectado.show();
            MenuCrearBD.setEnabled(false);
            MenuConectarBD.setEnabled(false);
            MenuDesconectarBD.setEnabled(true);
            MenuEjecutarComandoBD.setEnabled(true);
            MenuPropiedadesBD.setEnabled(true);
            MenuRenombrarBD.setEnabled(true);
        } else
        {
            JOptionPane.showMessageDialog(null, "No se ha podido conectar con la BD", "Conectando", JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * Método que refresca el JIntConectado
     */
    public void refrescarConectado()
    {
        conectado.refrescar();
        conectado.show();
    }

    /**
     * Método que añade JIntExaminarTabla al mdi y los muestra
     *
     * @param jfeT (JIntExaminarTabla)
     * @param nombreTabla (String)
     */
    void anyadir(JIntExaminarTabla jfeT, String nombreTabla)
    {
        jfeT.setTitle("Tabla: " + nombreTabla);
        desktopPane.add(jfeT);
        jfeT.show();
    }

    /**
     * Método que se ejecuta cuando el formulario de login comprueba que los
     * datos son correctos
     *
     * @param c
     */
    public void loguearse(Contacto c)
    {
        MenuDesconectarMySQL.setEnabled(true);
        MenuCrearEvento.setEnabled(true);
        MenuCrearNota.setEnabled(true);
        MenuAgregarAmigo.setEnabled(true);
        MenuConectarMySQL.setEnabled(false);
        miContacto = c;

        panelusuario.cargarDatos();

        panelusuario.show();
        
        eventosPanel.cargarLugares();
    }

    /**
     * Método que crea un nuevo usuario en la base de datos y se loguea con él
     * @param nombre
     * @param telefono
     * @param email
     * @param contra 
     */
    public void anyadirUsuario(String nombre, String telefono, String email, String contra)
    {
        Contacto c = new Contacto(null, nombre, email, contra);
        c.setTelefono(telefono);
        em.getTransaction().begin();

        contactoControlador.create(c);
        em.getTransaction().commit();

        listaContactos = contactoControlador.findContactoEntities();

        loguearse(c);

    }

    /**
     * Método que muestra el formulario para crear eventos pasandole primero el
     * id del evento a mostrar
     *
     * @param id
     */
    public void mostrarEventosConId(int id)
    {
        eventosPanel.editarCampos();
        eventosPanel.setIdActual(id);
        eventosPanel.show();
    }

    /**
     * Método que muestra el formulario para crear eventos pasandole primero el
     * id del evento a mostrar
     *
     * @param id
     */
    public void mostrarEventos(Evento e)
    {
        eventosPanel.setMiEvento(e);
        eventosPanel.show();
    }

    /**
     * Método para mostrar el formulario de notas
     */
    public void mostrarNotas()
    {
        panelNotas.setUsuario(miContacto);
        panelNotas.show();
    }
}
